﻿//dd被困在了一个迷幻森林，现在她面前有一条凶险的大河，
//河中央有n个神奇的浮块，浮块按1∼n顺序标号，但两两并不相接，
//第i个浮块上有一个数字a[i]，可能是正数，也可能是负数, 
//每块浮块都附带一个魔法结界用于传送，当a[i]为正数时，
//dd可以选择传送到第i + k(1≤k≤a[i])个浮块上, 当dd抵达n号浮块时才可以顺利脱身，
//显然不管a[n]是多少，都没有任何意义，当a[i]为负时，
//dd只能选择标号小于等于i + a[i]的任意一块浮块进行传送，
//当i + a[i] < 1时，默认只能传送到1的位置，每次传送都会花费1s的时间，
//随着时间的流逝，迷雾森林的空气会被逐渐榨干，
//她现在在1号浮块，她想知道，她最快多久能顺利脱身，如果始终无法逃脱，请输出−1
//
//输入描述 :
//	第一行一个数n(2≤n≤2000)
//	接下来一行n个数a[i](1≤ | a[i] | ≤2000)表示浮块上的数字
//输出描述 :
//	输出一行，表示对应的答案
//
//输入
//	4
//	2 2 - 1 2
//输出
//	2
//说明
//	1跳到2, 1s
//	2跳到4, 1s
//	共2s
//
//输入
//	2
//	- 1 - 2
//输出
//	- 1

#include <iostream>
using namespace std;
const int N = 2010;
int n;
int arr[N];
int bfs()
{
	int left = 1, right = 1;
	int ret = 0;
	while (left <= right)
	{
		ret++;
		int r = right;
		for (int i = left; i <= right; i++)
		{
			r = max(r, arr[i] + i);
			if (r >= n)
			{
				return ret;
			}
		}
		left = right + 1;
		right = r;
	}
	return -1;
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> arr[i];

	cout << bfs() << endl;

	return 0;
}
